package com.mdb.open.epay.utils;

import com.mdb.bc.api.enums.ApiEnum;
import com.mdb.bc.utils.ObjectUtil;
import com.mdb.open.epay.domain.po.epay.EpFeeConfig;
import com.mdb.open.epay.enums.type.FeeTypeEnum;
import lombok.extern.log4j.Log4j2;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 费用计算工具类
 */
@Log4j2
public class FeeCalculateUtil {

    /**
     * 费用计算
     */
    public static BigDecimal calculateFee(EpFeeConfig epFeeConfig, BigDecimal orderAmt) {
        if (ObjectUtil.isEmpty(epFeeConfig)) {
            log.error("未配置手續費");
            return BigDecimal.ZERO;
        }
        return calculateFee(epFeeConfig.getFeeType(), epFeeConfig.getFeeValue(), orderAmt);
    }

    /**
     * 费用计算
     */
    public static BigDecimal calculateFee(String feeType, String feeValue, BigDecimal orderAmt) {
        FeeTypeEnum feeTypeEnum = ApiEnum.parse(FeeTypeEnum.class, feeType);
        if (ObjectUtil.isEmpty(feeTypeEnum)) {
            log.error("未配置該手續費類型");
            return BigDecimal.ZERO;
        }
        if (feeTypeEnum.equals(FeeTypeEnum.PER)) {
            return orderAmt.multiply(new BigDecimal(feeValue)).setScale(2, RoundingMode.HALF_UP);
        } else if (feeTypeEnum.equals(FeeTypeEnum.AMT)) {
            return new BigDecimal(feeValue);
        }
        log.error("配置的手續費類型未知");
        return BigDecimal.ZERO;
    }

}
